<?php
// +----------------------------------------------------------------------
// | Copyright (c) 2014-2020 http://zswin.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: zswin.cn
// +----------------------------------------------------------------------

//基于数组创建目录和文件
function create_dir_or_files($files)
{
    foreach ($files as $key => $value) {
        if (substr($value, -1) == '/') {
            mkdir($value);
        } else {
            @file_put_contents($value, '');
        }
    }
}
/**
 * 转化 \ 为 /
 *
 * @param	string	$path	路径
 * @return	string	路径
 */
function dir_path($path) {
	$path = str_replace('\\', '/', $path);
	if (substr($path, -1) != '/')
	$path = $path . '/';
	return $path;
}

function dir_path2($path) {
	$path = str_replace('/', '\\', $path);
	if (substr($path, -1) != '\\')
	$path = $path . '\\';
	return $path;
}

/**
 * 创建目录
 *
 * @param	string	$path	路径
 * @param	string	$mode	属性
 * @return	string	如果已经存在则返回true，否则为flase
 */

/**
 * 创建目录
 *
 * @param	string	$path	路径
 * @param	string	$mode	属性
 * @return	string	如果已经存在则返回true，否则为flase
 */
function dir_create($path, $mode = 0777) {
	if (is_dir($path))
	return TRUE;
	$ftp_enable = 0;
	$path = dir_path($path);
	$temp = explode('/', $path);
	$cur_dir = '';
	$max = count($temp) - 1;
	for ($i = 0; $i < $max; $i++) {
		$cur_dir .= $temp[$i] . '/';
		if (@is_dir($cur_dir))
		continue;
		@mkdir($cur_dir, 0777, true);
		@chmod($cur_dir, 0777);
	}
	return is_dir($path);
}

/**
 * 拷贝目录及下面所有文件
 *
 * @param	string	$fromdir	原路径
 * @param	string	$todir		目标路径
 * @return	string	如果目标路径不存在则返回false，否则为true
 */
function dir_copy($fromdir, $todir) {
	$fromdir = dir_path($fromdir);
	$todir = dir_path($todir);
	if (!is_dir($fromdir))
	return FALSE;
	if (!is_dir($todir))
	dir_create($todir);
	$list = glob($fromdir . '*');
	if (!empty($list)) {
		foreach ($list as $v) {
			$path = $todir . basename($v);
			if (is_dir($v)) {
				dir_copy($v, $path);
			} else {
				copy($v, $path);
				@chmod($path, 0777);
			}
		}
	}
	return TRUE;
}

/**
 * 转换目录下面的所有文件编码格式
 *
 * @param	string	$in_charset		原字符集
 * @param	string	$out_charset	目标字符集
 * @param	string	$dir			目录地址
 * @param	string	$fileexts		转换的文件格式
 * @return	string	如果原字符集和目标字符集相同则返回false，否则为true
 */
function dir_iconv($in_charset, $out_charset, $dir, $fileexts = 'php|html|htm|shtml|shtm|js|txt|xml') {
	if ($in_charset == $out_charset)
	return false;
	$list = dir_list($dir);
	foreach ($list as $v) {
		if (preg_match("/\.($fileexts)/i", $v) && is_file($v)) {
			file_put_contents($v, iconv($in_charset, $out_charset, file_get_contents($v)));
		}
	}
	return true;
}

/**
 * 列出目录下所有文件
 *
 * @param	string	$path		路径
 * @param	string	$exts		扩展名
 * @param	array	$list		增加的文件列表
 * @return	array	所有满足条件的文件
 */
function dir_list($path, $exts = '', $list= array()) {
	$path = dir_path($path);
	$files = glob($path . '*');
	foreach ($files as $v) {
		$fileext = fileext($v);
		if (!$exts || preg_match("/\.($exts)/i", $v)) {
			$list[] = $v;
			if (is_dir($v)) {
				$list = dir_list($v, $exts, $list);
			}
		}
	}
	return $list;
}

/**
 * 设置目录下面的所有文件的访问和修改时间
 *
 * @param	string	$path		路径
 * @param	int		$mtime		修改时间
 * @param	int		$atime		访问时间
 * @return	array	不是目录时返回false，否则返回 true
 */
function dir_touch($path, $mtime = TIME, $atime = TIME) {
	if (!is_dir($path))
	return false;
	$path = dir_path($path);
	if (!is_dir($path))
	touch($path, $mtime, $atime);
	$files = glob($path . '*');
	foreach ($files as $v) {
		is_dir($v) ? dir_touch($v, $mtime, $atime) : touch($v, $mtime, $atime);
	}
	return true;
}

/**
 * 目录列表
 *
 * @param	string	$dir		路径
 * @param	int		$parentid	父id
 * @param	array	$dirs		传入的目录
 * @return	array	返回目录列表
 */
function dir_tree($dir, $parentid = 0, $dirs = array()) {
	global $id;
	if ($parentid == 0)
	$id = 0;
	$list = glob($dir . '*');
	foreach ($list as $v) {
		if (is_dir($v)) {
			$id++;
			$dirs[$id] = array('id' => $id, 'parentid' => $parentid, 'name' => basename($v), 'dir' => $v . '/');
			$dirs = dir_tree($v . '/', $id, $dirs);
		}
	}
	return $dirs;
}
function rmdirr($dirname) {
	if (!file_exists($dirname)) {
		return false;
	}
	if (is_file($dirname) || is_link($dirname)) {
		return unlink($dirname);
	}
	$dir = dir($dirname);
	if($dir){
		while (false !== $entry = $dir->read()) {
			if ($entry == '.' || $entry == '..') {
				continue;
			}
			rmdirr($dirname . DIRECTORY_SEPARATOR . $entry);
		}
	}
	$dir->close();
	return rmdir($dirname);
    }
/**
 * 删除目录及目录下面的所有文件
 *
 * @param	string	$dir		路径
 * @return	bool	如果成功则返回 TRUE，失败则返回 FALSE
 */
function dir_delete($dir) {
	$dir = dir_path($dir);
	if (!is_dir($dir))
	return FALSE;
	$list = glob($dir . '*');
	foreach ($list as $v) {
		is_dir($v) ? dir_delete($v) : @unlink($v);
	}
	return @rmdir($dir);
}